package com.binhthuan.catechist.client;

import java.util.Date;

import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;

/**
 * 
 * @author Giang Đinh - Lớp truy xuất các thông số, các hàm tiện ích của chương
 *         trình.
 * 
 */
public class ECApplication {

    private static ExemplaryCatechist entryPoint;
    private static DateTimeFormat dateFormatter = DateTimeFormat.getFormat(PredefinedFormat.DATE_SHORT);

    /**
     * Lấy bộ định dạng ngày của chương trình.
     * 
     * @return the dateFormatter
     */
    public static DateTimeFormat getDateFormatter() {
        return dateFormatter;
    }

    /**
     * Định dạng kiểu ngày sang chuỗi.
     * 
     * @param date
     * @return
     */
    public static String formatDate(Date date) {
        return dateFormatter.format(date);
    }

    /**
     * Lấy module chính của chương trình.
     * 
     * @return Module chính của chương trình.
     */
    public static ExemplaryCatechist getEntryPoint() {
        return entryPoint;
    }

    /**
     * Gán module chính của chương trình.
     * 
     * @param entryPoint
     *            Module chính của chương trình.
     */
    public static void setEntryPoint(ExemplaryCatechist entryPoint) {
        ECApplication.entryPoint = entryPoint;
    }

    /**
     * Lấy các nhãn hiển thị trong chương trình.
     * 
     * @return
     */
    public static ECConstants getConstants() {
        return ExemplaryCatechist.getConstants();
    }

    /**
     * Lấy các câu thông báo hiển thị trong chương trình.
     * 
     * @return
     */
    public static ECMessages getMessages() {
        return ExemplaryCatechist.getMessages();
    }

    /**
     * Tạo đường dẫn tới server.
     * 
     * @return Đường dẫn tới server.
     */
    public static String encodeURL() {
        return ECApplication.entryPoint.encodeURL();
    }

    /**
     * Tạo đường dẫn tới server.
     * 
     * @param serviceName
     *            Tên servlet
     * @return Đường dẫn tới server.
     */
    public static String encodeURL(String serviceName) {
        return ECApplication.entryPoint.encodeURL(serviceName);
    }

    /**
     * Tạo đường dẫn tới server.
     * 
     * @param serviceName
     *            Tên servlet
     * @param operation
     *            Tên hành động cần thực hiện.
     * @return Đường dẫn tới server.
     */
    public static String encodeURL(String serviceName, String operation) {
        return ECApplication.entryPoint.encodeURL(serviceName, operation);
    }

    /**
     * Tạo đường dẫn tới server.
     * 
     * @param serviceName
     *            Tên servlet
     * @param operation
     *            Tên hành động cần thực hiện.
     * @param operationInfo
     * @return Đường dẫn tới server.
     */
    public static String encodeURL(String serviceName, String operation, String operationInfo) {
        return ECApplication.entryPoint.encodeURL(serviceName, operation, operationInfo);
    }

    /**
     * Tạo đường dẫn tới server.
     * 
     * @param serviceName
     *            Tên servlet
     * @param operation
     *            Tên hành động cần thực hiện.
     * @param operationInfo
     * @param parameterString
     *            Chuỗi tham số truyền tới server.
     * @return Đường dẫn tới server.
     */
    public static String encodeURL(String serviceName, String operation, String operationInfo, String parameterString) {
        return ECApplication.entryPoint.encodeURL(serviceName, operation, operationInfo, parameterString);
    }
}
